﻿Imports System.Net
Public Class Form1
    Dim cur_dir As String = "" ' cur_dir erstellen

    Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
        If e.KeyCode = Keys.Enter Then ' Enter gedrückt
            command(TextBox1.Text) ' Führe command mit dem Text aus
        End If
    End Sub

    Sub command(ByVal command As String)
        RichTextBox1.Text &= command & " <-- Executing" & vbNewLine ' Anfang von Command
        Select Case True
            Case command = "help" ' Wenn Befehl = help
                RichTextBox1.Text &= "---Hilfe---" & vbNewLine &
                    "Folgende Befehle existieren:" & vbNewLine &
                    "help --- Ruft die Hilfe auf" & vbNewLine &
                    "mk --- Erstellt eine/n Datei/Ornder" & vbNewLine &
                    "cd --- Wechselt das Verzeichnis" & vbNewLine &
                    "dir --- Zeigt den Ordnerinhalt an" & vbNewLine &
                    "run --- Führt eine Datei aus" & vbNewLine &
                    "exit --- Beendet das Programm" & vbNewLine &
                    "mv --- Kopiert/Verschiebt ein/eine Ordner/Datei" & vbNewLine &
                    "color - Änder Aussehen von Konsole" & vbNewLine &
                    "update - Aktualisiert Konsole" & vbNewLine &
                    "---Hilfe-Ende---" ' schreibe Hilfe

            Case command.StartsWith("dir") ' Wenn Dir
                RichTextBox1.Text &= "Verzeichnisse für """ & dir(cur_dir) & """" ' SChreibe Text
                Dim dirs() As String = System.IO.Directory.GetDirectories(cur_dir) ' Definiere Dirs
                Dim files() As String = System.IO.Directory.GetFiles(cur_dir, "*.*", IO.SearchOption.TopDirectoryOnly) ' Suche Dateien
                For Each entry In dirs ' gehe für jeden entry in dirs
                    RichTextBox1.Text &= vbNewLine & "Verzeichnis: " & dir(entry) ' Schreibe Verzeichnis
                Next
                For Each entry In files
                    RichTextBox1.Text &= vbNewLine & "Datei: " & dir(entry) ' Gebe Dateiname aus
                Next

            Case command.StartsWith("mk") ' Wenn Befehl is mk
                If command = "mk" Then ' wenn kein Befehl dahinter kommt
                    RichTextBox1.Text &= "Fehler im Befehl." & vbNewLine & "Benutzung: mk [OPTION]" & vbNewLine & "-dir ""DIRECTORY_NAME"" --- Erstellt den Ordner DIRECTORY_NAME im aktuellen Verzeichnis." & vbNewLine & "-file ""FILE_NAME"" -TEXT --- Erstellt die Datei FILE_NAME mit dem Text -TEXT im aktuellen Verzeichnis." ' schreibe die Hilfe zum Befehl
                Else ' Ansonsten

                    If (Split(command, " ")(1) = "dir") Then ' Teile command mit " " 
                        Try
                            System.IO.Directory.CreateDirectory(cur_dir & "\" & Split(command, " ")(2)) ' erstelle Verzeichnis
                            RichTextBox1.Text &= "Ordner erstellt: " & Split(command, " ")(2) ' Gib aus

                        Catch ex As IO.IOException ' Bei Dateisystemfehler
                            RichTextBox1.Text &= "Dateisystemfehler"

                        Catch ex As Exception ' Bei allgemeinem Fehler
                            RichTextBox1.Text &= "Allgemeiner Fehler beim erstellen des Ordners"
                        End Try
                    ElseIf (Split(command, " ")(1) = "file") Then ' Wenn command = file
                        Try
                            Dim file As String = cur_dir & "\" & Split(command, " ")(2) ' erstelle Dateipfad
                            System.IO.File.WriteAllText(file, Split(command, "-")(1)) ' schreibe in Datei
                            RichTextBox1.Text &= "Datei erstellt: " & Split(command, "-")(1) ' gib aus

                        Catch ex As IO.IOException ' Bei Dateisystemfehler
                            RichTextBox1.Text &= "Dateisystemfehler"

                        Catch ex As Exception ' Bei allgemeinemfehler
                            RichTextBox1.Text &= "Allgemeiner Fehler beim erstellen der Datei"
                        End Try

                    Else
                        RichTextBox1.Text &= "Fehler im Befehl." & vbNewLine & "Benutzung: mk [OPTION]" & vbNewLine & "dir  DIRECTORY_NAME --- Erstellt den Ordner DIRECTORY_NAME im aktuellen Verzeichnis." & vbNewLine & "file FILE_NAME -TEXT --- Erstellt die Datei FILE_NAME mit dem Text -TEXT im aktuellen Verzeichnis." ' Bei falscher benutzung
                    End If
                End If

            Case command = "clear"
                RichTextBox1.Text = "" ' Lösche ausgabe

            Case command.StartsWith("rm") ' Wenn Befehl = rm
                If command = "rm" Then

                    RichTextBox1.Text &= "Fehler im Befehl" & vbNewLine & "Bentzung: rm -[option] -[pfad]" & vbNewLine & "Options:" & vbNewLine & "f --- Löscht eine Datei" & vbNewLine & "d --- Löscht einen Ordner" ' Falsche Benutzung des befehls

                Else
                    If Split(command, " -")(1) = "f" Then ' wenn Dateilöschen

                        Try
                            System.IO.File.Delete(cur_dir & "\" & Split(command, "-")(2)) ' Lösche Datei

                        Catch ex As IO.IOException
                            RichTextBox1.Text &= "Datei kann nicht gelöscht werden"

                        Catch ex As Exception
                            RichTextBox1.Text &= "Allgemeiner Fehler"
                        End Try
                    ElseIf Split(command, " -")(1) = "d" Then ' wenn Verzeichnislöschen
                        Try
                            System.IO.Directory.Delete(cur_dir & "\" & Split(command, "-")(2)) ' Lösche Verzeichnis
                        Catch ex As IO.IOException
                            RichTextBox1.Text &= "Fehler beim Löschen des Ordners"
                        Catch ex As Exception
                            RichTextBox1.Text &= "Allgemeiner Fehler"
                        End Try
                    End If
                End If

            Case command.StartsWith("cd") ' wenn cd
                If command = "cd" Then
                    RichTextBox1.Text &= "Fehler im Befehl" & vbNewLine & "Benutzung: cd [OPTION]" & vbNewLine & ".. --- Vorheriges Verzeichnis" & vbNewLine & "/ --- Root Verzeichnis" ' Fehler in Anwendung
                Else
                    If (Split(command, " ")(1) = "..") Then ' Gehe ins vorherige Verzeichnis
                        If cur_dir <> root_dir Then ' wenn cur_dir ist nicht root_dir
                            cur_dir = System.IO.Directory.GetParent(cur_dir).ToString ' gehe ins parent verzeichnis
                        End If
                    ElseIf (Split(command, " ")(1) = "/") Then ' wenn / gehe in root_dir
                        cur_dir = root_dir
                    ElseIf Not (Split(command, " ")(1) = Nothing) Then ' wenn verzeichnis angegeben
                        If IO.Directory.Exists(cur_dir & "\" & Split(command, " ")(1)) Then
                            cur_dir = cur_dir & "\" & Split(command, " ")(1) ' gehe ins Verzeichnis xy
                        Else
                            RichTextBox1.Text &= "Verzeichnis """ & Split(command, " ")(1) & """ existiert nicht"
                        End If

                    Else
                        RichTextBox1.Text &= "Fehler im Befehl" & vbNewLine & "Benutzung: cd [OPTION]" & vbNewLine & ".. --- Vorheriges Verzeichnis" & vbNewLine & "/ --- Root Verzeichnis" ' Ansonsten fehler im befehl
                    End If
                End If

            Case command.StartsWith("run") ' Führe aus
                If command = "run" Then
                    RichTextBox1.Text &= "Fehler im Befehl." & vbNewLine & "Benutzung: run -FILE_NAME" ' Keine Parameter
                Else
                    If Not (Split(command, "-")(1) = Nothing) Then
                        Process.Start(cur_dir & "\" & Split(command, "-")(1)) ' Starteprozess xy
                    End If
                End If

            Case command.StartsWith("mv") 'verschieben
                If command = "mv" Then
                    RichTextBox1.Text &= "Fehler im Befehl" & vbNewLine &
                        "Benutzung: mv {type} {mode} -Quelle -Ziel " & vbNewLine &
                        "Typen:" & vbNewLine &
                        "-f --- Kopiert/Verschiebt eine Datei" & vbNewLine &
                        "-d --- Kopiert/Verschiebt einen Ordner" & vbNewLine &
                        vbNewLine &
                        "Modes:" & vbNewLine &
                        "-c --- Kopiert eine/n Datei/Ordner" & vbNewLine &
                        "-m --- Verschiebt eine/n Datei/Ordner" & vbNewLine &
                        vbNewLine &
                        "Pfad muss in absoluter Angabe erfolgen" & vbNewLine &
                        "Beispiel: mv -f -c -Test.txt -/home/Test.txt" & vbNewLine &
                        "mv -d -m -Test -/Test" & vbNewLine &
                        vbNewLine &
                        "Achtung: Wenn die/der Datei/Ordner schon existiert, wird diese/r überschrieben." ' Keine Parameterdaten
                Else
                    If Split(command, " -")(1) = "f" Then ' Datei
                        If Split(command, " -")(2) = "c" Then ' Kopieren
                            Try
                                System.IO.File.Copy(cur_dir & "\" & Split(command, " -")(3), root_dir & Split(command, " -")(4), True) ' Kopiert
                            Catch ex As IO.IOException
                                RichTextBox1.Text &= "Fehler beim Kopieren der Datei"
                            Catch ex As Exception
                                RichTextBox1.Text &= "Allgemeiner Fehler"
                            End Try
                        ElseIf Split(command, " -")(2) = "m" Then ' Verschieben
                            Try
                                System.IO.File.Move(cur_dir & "\" & Split(command, " -")(3), root_dir & Split(command, " -")(4)) ' Verschiebt
                            Catch ex As IO.IOException
                                RichTextBox1.Text &= "Fehler beim Verschieben der Datei"
                            Catch ex As Exception
                                RichTextBox1.Text &= "Allgemeiner Fehler"
                            End Try
                        End If
                    ElseIf Split(command, " -")(1) = "d" Then ' Verzeichnis
                        If Split(command, " -")(2) = "c" Then ' Kopieren
                            Try
                                My.Computer.FileSystem.CopyDirectory(cur_dir & "\" & Split(command, " -")(3), root_dir & Split(command, " -")(4)) ' Kopiert
                            Catch ex As IO.IOException
                                RichTextBox1.Text &= "Fehler beim Kopieren des Ordner"
                            Catch ex As Exception
                                RichTextBox1.Text &= "Allgemeiner Fehler"
                            End Try
                        ElseIf Split(command, " -")(2) = "m" Then ' Verschieben
                            Try
                                System.IO.Directory.Move(Replace(cur_dir & "\" & Split(command, " -")(3), "/", "\"),
                                                                     Replace(root_dir & Split(command, " -")(4) & "\" & Split(command, " -")(3), "/", "\")) ' Verschiebt
                            Catch ex As IO.IOException
                                RichTextBox1.Text &= "Fehler beim Verschieben des Ordners"
                            Catch ex As Exception
                                RichTextBox1.Text &= "Allgemeiner Fehler"
                            End Try
                        End If
                    End If
                End If

            Case command = "version" ' Zeigt Version
                RichTextBox1.Text &= "Version von Konsole v1: " & My.Application.Info.Version.Major & "." & My.Application.Info.Version.Minor & "." & My.Application.Info.Version.Build & " Patch " & My.Application.Info.Version.Revision ' Ausgabe, aktuell: 1.0.0 Patch 2

            Case command.StartsWith("color")
                If command = "color" Then
                    RichTextBox1.Text &= "Fehler im Befehl." & vbNewLine & "Benutzung: color f/b/a {R} {G} {B}" & vbNewLine & "Beispiel:" & vbNewLine & "color a 0 0 0 255 255 255" & vbNewLine & "color f 0 255 0"
                Else
                    If Split(command, " ")(1) = "f" Then
                        RichTextBox1.ForeColor = System.Drawing.Color.FromArgb(Convert.ToInt32(Split(command, " ")(2)), Convert.ToInt32(Split(command, " ")(3)), Split(command, " ")(4))
                        TextBox1.ForeColor = System.Drawing.Color.FromArgb(Convert.ToInt32(Split(command, " ")(2)), Convert.ToInt32(Split(command, " ")(3)), Split(command, " ")(4))
                    ElseIf Split(command, " ")(1) = "b" Then
                        RichTextBox1.BackColor = System.Drawing.Color.FromArgb(Convert.ToInt32(Split(command, " ")(2)), Convert.ToInt32(Split(command, " ")(3)), Split(command, " ")(4))
                        TextBox1.BackColor = System.Drawing.Color.FromArgb(Convert.ToInt32(Split(command, " ")(2)), Convert.ToInt32(Split(command, " ")(3)), Split(command, " ")(4))
                    ElseIf Split(command, " ")(1) = "a" Then
                        RichTextBox1.ForeColor = System.Drawing.Color.FromArgb(Convert.ToInt32(Split(command, " ")(2)), Convert.ToInt32(Split(command, " ")(3)), Split(command, " ")(4))
                        TextBox1.ForeColor = System.Drawing.Color.FromArgb(Convert.ToInt32(Split(command, " ")(2)), Convert.ToInt32(Split(command, " ")(3)), Split(command, " ")(4))

                        RichTextBox1.BackColor = System.Drawing.Color.FromArgb(Convert.ToInt32(Split(command, " ")(5)), Convert.ToInt32(Split(command, " ")(6)), Split(command, " ")(7))
                        TextBox1.BackColor = System.Drawing.Color.FromArgb(Convert.ToInt32(Split(command, " ")(5)), Convert.ToInt32(Split(command, " ")(6)), Split(command, " ")(7))
                    End If
                End If

            Case command.StartsWith("update")
                Dim webclient As New WebClient ' Webclient initialisieren
                Dim str As String = webclient.DownloadString("http://update.procoding.tk/konsole.update") ' Update herunterladen
                Dim cur_ver As String = My.Application.Info.Version.Major & My.Application.Info.Version.Minor & My.Application.Info.Version.Build & My.Application.Info.Version.Revision ' Lade Version in Variable ( Bsp. 1004 )
                Dim new_ver As String = Replace(Split(str, " ")(0), ".", "") ' Lade neue Version ( Bsp. 1005 )
                If command = "update" Then
                    If Int(cur_ver) < Int(new_ver) Then
                        RichTextBox1.Text &= "Neue Version!" & vbNewLine & "update -update Um zu aktualisieren"
                    Else
                        RichTextBox1.Text &= "Keine Neue Version."
                    End If
                Else
                    If Split(command, " -")(0) = "update" Then
                        webclient.DownloadFile(Split(str, " ")(1), My.Application.Info.DirectoryPath & "\Konsole.update")
                        Vars.Update = True
                        Me.Close()
                    End If
                End If

            Case command = "exit"
                End ' Beendet

            Case Else
                RichTextBox1.Text &= "Der Befehl """ & command & """ existiert nicht." ' Bei nicht bekanntem Befehl
        End Select
        TextBox1.Text = "" ' Befehls Textbox = ""
        RichTextBox1.Text &= vbNewLine & dir(cur_dir) & ">" ' Füge neue Zeile mit cur_dir> ein
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        cur_dir = root_dir ' Initialisiere cur_dir
        RichTextBox1.Text &= dir(cur_dir) & "> " ' schreibe rein
    End Sub

    Private Sub TextBox1_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.LostFocus
        TextBox1.Focus()
    End Sub

    Private Sub RichTextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RichTextBox1.TextChanged
        RichTextBox1.SelectionStart = RichTextBox1.TextLength
        RichTextBox1.SelectionLength = 0
        RichTextBox1.ScrollToCaret()
    End Sub
End Class
Module Vars
    Public root_dir As String ' dies ist die Root directory
    Public Update As Boolean = False
    Public Function dir(ByVal t As String) As String ' Funktion "dir" t = pfad
        Dim tmp As String = Replace(t, My.Application.Info.DirectoryPath, "") ' ersetze My.Application.info.directorypath mit ""
        Dim erg As String = Replace(tmp, "\", "/") ' ersetze "\" mit "/"
        Return erg ' gebe erg zurück
    End Function
End Module
